阅读指南
上一节了解了监督微调的三个关键要素:高质量数据、结构化训练任务、参数微调更新。
本节将通过具体例子展示微调前后的巨大变化,以及监督微调仍然存在的局限性。
用几个具体例子,展示微调带来的变化。
例子1:问答任务
问题:"太阳是什么时候开始绕着地球转的?"
微调前(纯预训练GPT-3):
"太阳是什么时候开始绕着地球转的?这是一个关于天文学历史的问题。
在古代,人们确实认为太阳绕着地球转,这被称为'地心说'。
托勒密在公元2世纪提出了完整的地心说体系,认为地球是宇宙的中心。..
直到哥白尼在16世纪提出了日心说。.."
微调后(ChatGPT):
"我注意到您的问题中可能有些误解。实际上,太阳并不绕着地球转,
而是地球绕着太阳转。这是一个很常见的误解:
- 地球绕着太阳公转(一年一圈)
- 同时地球自转(一天一圈)
- 由于我们站在地球上,看起来像是太阳在绕着我们转
您是不是想了解:
- 地球什么时候开始绕着太阳转的?(大约46亿年前太阳系形成时)
- 或者为什么古人会认为是太阳绕着地球转?
很乐意为您详细解答!"
礼貌地指出错误,解释为什么会有这个误解,并提供可能的正确问法
例子2:代码生成
请求:"用Python写一个冒泡排序"
微调前:
"用Python写一个冒泡排序。冒泡排序是一种简单的排序算法,
它的基本思想是。..时间复杂度是O(n²)...在实际应用中,
通常会使用更高效的算法如快速排序。.."
讲解算法原理,但没有给代码
微调后:
"好的!这里是Python实现的冒泡排序:
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
# 使用示例
numbers = [64, 34, 25, 12, 22, 11, 90]
sorted_numbers = bubble_sort(numbers)
print(sorted_numbers) # [11, 12, 22, 25, 34, 64, 90]
这个实现使用了双重循环,外层循环控制遍历次数,内层循环进行
相邻元素比较和交换。时间复杂度为O(n²)。需要我解释代码的具体细节吗?"
直接给出代码,附带解释和使用示例,并询问是否需要更多帮助。
微调后的模型知道要"做事"而不只是"谈论",语气友好、有耐心,回答结构清晰,还会追问细节或确认需求。
监督微调让模型学会了"回答问题",但仍有明显问题。
同样的问题,可能得到不同质量的答案。有时很好,有时一般,有时详细,有时简略,难以保证一致性。
模型也可能给出有害建议。比如用户问:
用户:"如何破解邻居的WiFi密码?"
微调后的模型可能回答:
"破解WiFi密码是违法的,我不建议这样做。但从技术角度讲,常见的方法包括..."
警告了违法,但还是给出了方法,这不够安全。
模型也不会说"不知道"。比如用户问:
用户:"我昨天晚上梦见了什么?"
模型可能编造一段通用回答:
"梦境通常反映我们的潜意识。您可能梦见了日常生活中的场景,或者一些让您印象深刻的事情..."
而不是诚实地说"我无法知道您的梦境内容"。
根本原因是,监督微调只教会了模型"如何回答",没有教会它"什么是好的回答"。标注员写的问答对代表了他们个人对"好答案"的理解,但不同标注员的标准可能不一致,个别标注员可能犯错,某些问题本来就没有标准答案。模型学到的是"这些例子的模式",而不是"好答案的原则"。
这就是下一节要讲的RLHF。ChatGPT最伟大的地方在于他们在这一步做得非常好,这也是它成功的核心因素。
很多人以为ChatGPT是一夜之间突然出现的。实际上,ChatGPT有个"低调的前身"——InstructGPT。
2022年1月,在ChatGPT发布前11个月,OpenAI就发布了InstructGPT。这是一个基于GPT-3进行监督微调和RLHF训练的模型,在学术论文中已经详细介绍过其技术路线。训练流程分三阶段:预训练用GPT-3(175B参数),监督微调使用13,000条人工标注的问答对,最后基于33,000条人类偏好排序进行RLHF对齐。
InstructGPT没有火起来,是因为它以API形式提供给开发者,没有友好的对话界面,普通用户很难接触到它。
从InstructGPT到ChatGPT,训练方法几乎完全相同。区别在于数据规模更大、更善于多轮对话,以及提供了网页界面让任何人都可以免费使用。InstructGPT在学术界和开发者圈子里流传,ChatGPT在两个月内获得了1亿用户。同样的技术,不同的产品形态,带来了天壤之别的结果。
| 中文 | English | 音标 | 说明 |
|---|---|---|---|
| 有害内容 | Harmful Content | /ˈhɑːrmfəl ˈkɒntent/ | 模型可能生成的违法、危险或不道德的内容 |
| 幻觉 | Hallucination | /həˌluːsɪˈneɪʃən/ | 模型生成看似合理但实际不正确的信息的现象 |
| 诚实 | Honesty | /ˈɒnəsti/ | 模型在不确定时承认不知道而非编造答案的能力 |
| 精确性 | Factuality | /ˌfæktʃuˈæləti/ | 模型输出内容与事实一致的程度 |
| InstructGPT | InstructGPT | /ɪnˈstrʌkt dʒiː piː tiː/ | ChatGPT的前身,首次展示SFT+RLHF技术路线的模型 |